/**
 * 
 */
package com.demo.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author LMH
 * @version 创建时间：2019年7月17日 下午2:29:02
 * 
 * 自己可以封装一些工具类方便使用
 * 包括连接池的配置，jedis参数的配置等
 */
public class RedisUtils {
	
	private static JedisPool jedisPool = null;
	private static Jedis jedis;
	  
	static {
	 jedis = getJedisPool().getResource();
	}
	  
	/**
	 * 构建redis连接池
	 */
	public static JedisPool getJedisPool() {
	 if (jedisPool == null) {
	  JedisPoolConfig config = new JedisPoolConfig();
	  config.setMaxTotal(1024); // 可用连接实例的最大数目,如果赋值为-1,表示不限制.
	  config.setMaxIdle(5); // 控制一个Pool最多有多少个状态为idle(空闲的)jedis实例,默认值也是8
	  config.setMaxWaitMillis(1000 * 100); // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时/如果超过等待时间,则直接抛出异常
	  config.setTestOnBorrow(true); // 在borrow一个jedis实例时,是否提前进行validate操作,如果为true,则得到的jedis实例均是可用的
	  jedisPool = new JedisPool(config, "127.0.0.1", 6379);
	 }
	 return jedisPool;
	}
	  
	/**
	 * 释放jedis资源
	 */
	public static void returnResource(Jedis jedis) {
	 if (jedis != null) {
	  jedis.close();
	 }
	}
	public static String get(String key) {
	 String value = null;
	 Jedis jedis = null;
	 try {
	  JedisPool pool = getJedisPool();
	  jedis = pool.getResource();
	  value = jedis.get(key);
	 }
	 catch (Exception e) {
	  returnResource(jedis);
	  e.printStackTrace();
	 }
	 finally {
	  returnResource(jedis);
	 }
	 return value;
	}
	
	public static String set(String key, String value) {
		String result = null;
		Jedis jedis = null;
		try {
			JedisPool pool = getJedisPool();
			jedis = pool.getResource();
			result = jedis.set(key, value);
		} catch (Exception e) {
			returnResource(jedis);
			e.printStackTrace();
		}finally {
			returnResource(jedis);
		}
		return result;
	}


	
	public static void main(String[] args) {
		System.out.println(set("haha", "------"));
		String value = get("haha");
		System.out.println(value);
	}
}
